package yy.zn.mapper;

import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import yy.zn.entity.*;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author LiuLei
 */
@Mapper
public interface DataMapper {

    /**
     * 根据指令号 获取工单信息
     *
     * @param mocCode 指令号
     * @return 制令信息
     */
    MocoRders mocoReders(String mocCode);

    /**
     * 根据工单物料id 获取工单物料信息
     *
     * @param list 工单物料
     * @return 工单物料信息
     */
    List<MocoRdersBordy> mocoRedersBordyList(List<Integer> list);

    /**
     * 根据到货单号  获取到货单信息
     *
     * @param query 到货单条码
     * @return 到货单
     */
    List<Arrival> arrival(Map<String, String> query);

    /**
     * 根据到货单号  获取到货单信息
     *
     * @param bar 到货单条码
     * @return 到货单
     */
    List<ArrivalVouch> arrivalVouch(List<String> bar);

    /**
     * 根据到货单号  获取到货单信息
     *
     * @param query 查询条件
     * @return 到货单
     */
    List<String> arrivalVouchMergeBarList(Map<String, Object> query);

    /**
     * 根据到货单单据 获取到货单信息集
     *
     * @param bars 到货单条码
     * @return 到货单集
     */
    List<ArrivalVouch> arrivalVouchList(List<String> bars);

    /**
     * 根据到货单单据 获取到货单信息集
     *
     * @param params 查询条件
     * @return 到货单集
     */
    List<ArrivalVouch> arrivalVouchLists(Map<String, String> params);

    /**
     * @param bar 条码
     * @return 到货单
     */
    ArrivalVouch arrivalProcesses(String bar);

    /**
     * 查询到货单详情信息
     *
     * @param dto 查询提哦啊见
     * @return 到货单详情
     */
    List<ArrivalRepository> arrivalRepository(ArrivalResDto dto);

    /**
     * 根据储位条码 获取储位信息
     *
     * @param barCode 储位条码
     * @return 储位信息
     */
    Goods goods(String barCode);

    /**
     * 根据储位条码 获取储位信息
     *
     * @param param [物料编号、仓库]
     * @return 储位信息
     */
    List<Position> position(Map<String, String> param);

    /**
     * 根据储位条码 获取储位信息
     *
     * @param barCode 储位条码
     * @return 储位信息
     */
    List<Goods> goodsLis(Set<String> barCode);

    /**
     * 接收或发送类型
     *
     * @param type 类型
     * @return {@code List<QueryInfo>}
     */
    List<QueryInfo> receiveOrSendType(int type);

    /**
     * 采购类型
     *
     * @return {@code List<QueryInfo>}
     */
    List<QueryInfo> purType();

    /**
     * 销售类型
     *
     * @return {@code List<QueryInfo>}
     */
    List<QueryInfo> saleType();

    /**
     * 销售订单
     *
     * @param order 订单
     * @return {@code Map<String, SaleOrder>}
     */
    @MapKey("invCode")
    Map<String, SaleOrder> saleOrder(String order);

    /**
     * 审核销售订单
     *
     * @param map 修改参数
     * @return int
     */
    int auditSaleOrder(Map<String, Object> map);

    /**
     * 查询领料库存信息
     *
     * @param bar 条码号
     * @return 领料库存信息
     */
    List<Produce> produceQty(String bar);

    /**
     * 查询领料单
     *
     * @param bar 生产订单条码
     * @return 领料单信息
     */
    List<ProduceInv> produceInv(String bar);

    /**
     * 根据物料编号查询物料信息
     *
     * @param bar 物料编号
     * @return 物料集
     */
    List<InvCode> getInvByInvCode(String bar);

    /**
     * 根据物料编号查询物料信息
     *
     * @param list 物料编号
     * @return 物料集
     */
    List<InvCode> getInvByInvCodes(List<String> list);

    /**
     * 根据物料编号和批号查询库存信息
     *
     * @param invCode 物料编号
     * @param batch   批号
     * @return 库存信息
     */
    InvStock getStockByInvAndBatch(@Param("invCode") String invCode, @Param("batch") String batch);

    /**
     * 根据存户信息查询时间
     *
     * @param curDate 库存信息查询条件
     * @return 时间
     */
    String getCurrentStockDateByCur(CurDate curDate);

    /**
     * 获取所有仓库信息
     *
     * @return 仓库信息
     */
    List<WareHouse> getAllWareHouse();

    /**
     * 根据储位编号和名称 查看是否有库存
     *
     * @param code 储位 编号
     * @param name 储位 名称
     * @retur 库存数
     */
    Integer findCurrentIsExistsByPositionCodeAndName(@Param("code") String code, @Param("name") String name);

    /**
     * @param code 物料编码
     * @return 查询现存量
     * @since 2025/05/19
     */
    List<Position> findQuantityOnHand(String code);

    /**
     * @param code    物料编码
     * @param whCodes 仓库编号
     * @return 存货查询
     * @since 2025/05/19
     */
    List<Position> getAllInvStock(
            @Param("code") String code,
            @Param("whCodes") List<String> whCodes);

    /**
     * 存货查询
     *
     * @param invQuery 查询条件
     * @return 存货信息
     */
    Long INVENTORY_COUNT(InvQuery invQuery);

    /**
     * 存货查询
     *
     * @param invQuery 查询条件
     * @return 存货信息
     */
    List<Inventory> INVENTORY(InvQuery invQuery);
}
